cssnode: Clear widget path more aggressively
authorBenjamin Otte <otte@redhat.com>
Tue, 24 Mar 2015 03:14:28 +0000 (04:14 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 24 Mar 2015 03:23:07 +0000 (04:23 +0100)
When recomputing CSS, we need a correct widget path in the fallback mode
where we're still using widget paths.
So we need to invalidate it everytime it actually changes, and not just
when emitting the style-updated signal.

Fixes css-match-regions reftest.

gtk/gtkcsswidgetnode.c
gtk/gtkwidget.c
gtk/gtkwidgetprivate.h

index 12bd1434ecd39411b7d9f8c134615f7225866917..70ae532ecdb13ed8240d0eb88b8ce000288e13ab 100644 (file)
@@ -54,6 +54,9 @@ gtk_css_widget_node_style_changed (GtkCssNode   *cssnode,
 
   node = GTK_CSS_WIDGET_NODE (cssnode);
 
+  if (node->widget)
+    gtk_widget_clear_path (node->widget);
+
   GTK_CSS_NODE_CLASS (gtk_css_widget_node_parent_class)->style_changed (cssnode, old_style, new_style);
 
   diff = gtk_css_style_get_difference (new_style, old_style);
index 34fa82f671a3e9ca31ca8f7563135b6a08d251f3..1545441d8e651d9b2d3d4cd21b8cc5c393b637b0 100644 (file)
@@ -16400,14 +16400,18 @@ gtk_widget_get_path (GtkWidget *widget)
 }
 
 void
-_gtk_widget_style_context_invalidated (GtkWidget *widget)
+gtk_widget_clear_path (GtkWidget *widget)
 {
   if (widget->priv->path)
     {
       gtk_widget_path_free (widget->priv->path);
       widget->priv->path = NULL;
     }
+}
 
+void
+_gtk_widget_style_context_invalidated (GtkWidget *widget)
+{
   if (gtk_widget_get_realized (widget))
     g_signal_emit (widget, widget_signals[STYLE_UPDATED], 0);
   else
index c463a5b906d6bd934f121bc309c7cd83a1dd83a3..95b7bb17aa444aa46dbd2f30d99e9576374e5c28 100644 (file)
@@ -148,6 +148,7 @@ gboolean          _gtk_widget_captured_event               (GtkWidget *widget,
                                                             GdkEvent  *event);
 
 GtkWidgetPath *   _gtk_widget_create_path                  (GtkWidget    *widget);
+void              gtk_widget_clear_path                    (GtkWidget    *widget);
 void              _gtk_widget_invalidate_style_context     (GtkWidget    *widget,
                                                             GtkCssChange  change);
 void              _gtk_widget_style_context_invalidated    (GtkWidget    *widget);